<?php

require_once 'Mobitv/Admin/Action.php';
require_once 'Mobitv/Admin/Functions.php';

class ApproveAction extends Mobitv_Admin_Action {

    public function execute() {
        $this->checkPermission();
        $videoId = isset($_GET['id']) ? intval($_GET['id']) : 0;
        $videoDao = Vega_Dao::factory('Mobitv_Admin_Video');

        // Kiểm tra xem có phải là video đang chờ duyệt không
        $video = $videoDao->getPendingVideoDetail($videoId);

        if (!$videoId || !$video) {
            $this->forward404();
        }

        //
        if (!$videoDao->canApproveVideo($videoId)) {
            $this->gotoUrl('/video?type=pending');
        }
        $cancelApproving = isset($_GET['cancel']) ? $_GET['cancel'] : '';
        if ($cancelApproving) {
            if ($videoDao->cancelApproving($videoId)) {
                $this->gotoUrl('/video?type=pending', 'Đã bỏ duyệt');
            } else {
                $this->gotoUrl('/video?type=pending', 'Lỗi hệ thống');
            }
        }

        $this->_view->assign('video', $video);
        $videoCatDao = Vega_Dao::factory('Mobitv_Admin_Videocat');
        $isInvisibleCat = $videoCatDao->isInvisible($video['category_id']);
        if (!$isInvisibleCat)
            $cats = $videoCatDao->getList();
        else
            $cats = $videoCatDao->getInvisibleList();
        $this->_view->assign('cats', $cats);



        if ($_POST) {
            $data = array(
                'title' => $_POST['title'],
                'description' => $_POST['description'],
                'tag' => $_POST['tag'],
                'category_id' => $_POST['category_id'],
                'source' => $_POST['source'],
                'price' => $_POST['price'],
                'download_price' => $_POST['download_price'],
            );

            $minPrice = $this->_config['video_min_price'];
            $maxPrice = $this->_config['video_max_price'];
            $minDownloadPrice = $this->_config['download_min_price'];
            $maxDownloadPrice = $this->_config['download_max_price'];
            $rules = array(
                'title' => 'required|max_length:255',
                'description' => 'required|max_length:1000',
                'tag' => 'required|max_length:255',
                'price' => 'required|integer|greater_than:' . $minPrice . '|less_than:' . $maxPrice,
                'download_price' => 'required|integer|greater_than:' . $minDownloadPrice . '|less_than:' . $maxDownloadPrice,
            );

            $this->buildValidator($rules);

            $langError = array(
                'title' => array(
                    'required' => 'Bạn phải nhập vào tiêu đề',
                    'max_length' => 'Tiêu đề không được quá %val% kí tự',
                ),
                'description' => array(
                    'required' => 'Bạn phải nhập vào mô tả',
                    'max_length' => 'Mô tả không được quá %val% kí tự',
                ),
                'tag' => array(
                    'required' => 'Bạn phải nhập vào tag',
                    'max_length' => 'Mô tả không được quá %val% kí tự',
                ),
                'price' => array(
                    'required' => 'Bạn phải nhập vào giá',
                    'integer' => 'Giá phải là số',
                    'greater_than' => 'Một video giá phải lớn hơn %val%',
                    'less_than' => 'Một video giá phải nhỏ hơn %val%',
                ),
                'download_price' => array(
                    'required' => 'Bạn phải nhập vào giá tải',
                    'integer' => 'Giá phải là số',
                    'greater_than' => 'Giá tải video phải lớn hơn %val%',
                    'less_than' => 'Giá tải video phải nhỏ hơn %val%',
                ),
            );

            $this->_validator->setErrorMessages($langError);

            if (!$this->_validator->execute()) {
                $this->_view->assign('error', $this->_validator->getErrorMessages());
                $this->alert('Có lỗi xảy ra!');
            } else {
                if ($videoDao->approveVideo($data, $videoId)) {
                    $this->updateLogAdmin($_SESSION['userid'], 'video', $videoId, 'approve');
                    if (!empty($_POST['thumbnail'])) {
                        changeClipThumbnail($videoId, $_POST['thumbnail']);
                    }
                    if (!empty($_POST['featured'])) {
                        $videoDao->addFeaturedVideo($videoId);
                    }

                    $idNextPendingVideo = $videoDao->getIdNextPendingVideo();
                    if (!$idNextPendingVideo) {
                        $this->gotoUrl('/video/?type=pending', 'Đã kích hoạt');
                    } else {
                        $this->gotoUrl('/video/approve?id=' . $idNextPendingVideo, 'Đã kích hoạt, mời duyệt tiếp video dưới đây...');
                    }
                } else {
                    $this->alert('Lỗi hệ thống');
                }
            }
        } else {
            $_POST = $video;
        }

        $thumbs = getThumbnailList($videoId);
        $this->_view->assign('thumbs', $thumbs);

        $inforClip = $videoDao->getInforOfClip($videoId);
        $this->_view->assign('inforClip', $inforClip);
    }

}